/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package credit.paysystem;

import Modelo.Detallemovimiento;
import Modelo.Movimiento;
import Modelo.Productos;
import Modelo.Tipomovimiento;
import Modelo.Usuario;
import java.math.BigDecimal;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.MenuButton;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.TitledPane;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Pane;
import javax.swing.JOptionPane;
import mx.its.LnLocal.DetalleMovimientoLnLocal;
import mx.its.LnLocal.MovimientoLnLocal;
import mx.its.LnLocal.ProductosLnLocal;
import mx.its.LnLocal.TipoMovimientoLnLocal;
import mx.its.LnLocal.UsuarioLnLocal;
import mx.its.ln.DetallemovimientoLN;
import mx.its.ln.MovimientoLN;
import mx.its.ln.ProductosLN;
import mx.its.ln.TipoMovimientoLN;
import mx.its.ln.UsuarioLN;

/**
 * FXML Controller class
 *
 * @author Grnmnd
 */
public class CobroController implements Initializable {

    @FXML
    Button AddProducto;
    @FXML
    Label EtiquetaNombre;
    @FXML
    Label Encabezado;
    @FXML
    TableView TablaDetalles;
    @FXML
    TextField CampoId;
    @FXML
    Button Agregar;
    @FXML
    Button removeline;
    @FXML
    TextField CampoCantidad;
    @FXML
    TextField CampoNombre;
    @FXML
    TextField CampoNoControl;
    @FXML
    TextField CampoCarrera;
    @FXML
    TextField CampoSaldo;
    @FXML
    TextField CampoSaldoFuturo;
    @FXML
    TextField CampoTotal;
    @FXML
    ImageView foto;
    @FXML
    ComboBox comboProductos;
    @FXML
    TitledPane InternalAutorizar;
    @FXML
    PasswordField CampoPass;
    @FXML
    Pane cobroPane;
    static Usuario Autoriza;
    Movimiento cs = null;
    Usuario s = null;
    Productos p;
    static int x = 0;
    private double mtotal;
    private List<Detallemovimiento> listaDVen = new ArrayList<>();

    private void actulizarTablaDetaVenta() {

        ObservableList<Detallemovimiento> k = FXCollections.observableArrayList();
        for (Detallemovimiento detallemovimiento : listaDVen) {
            k.add(detallemovimiento);
        }
        TableColumn Cantidad = new TableColumn("Cantidad");
        Cantidad.setCellValueFactory(
                new PropertyValueFactory<Movimiento, String>("cantidad"));
        TableColumn Descripcion = new TableColumn("Producto");
        Descripcion.setCellValueFactory(
                new PropertyValueFactory<Movimiento, String>("descripcion"));
        Descripcion.setPrefWidth(100);
        TableColumn precioU = new TableColumn("Precio Unit");
        precioU.setCellValueFactory(
                new PropertyValueFactory<Movimiento, String>("precio"));
        precioU.setPrefWidth(70);
        TableColumn TotalL = new TableColumn("Total");
        TotalL.setCellValueFactory(
                new PropertyValueFactory<Movimiento, String>("totalLinea"));
        TotalL.setPrefWidth(70);


        TablaDetalles.setItems(k);
        TablaDetalles.getColumns().setAll(Cantidad, Descripcion, precioU, TotalL);
    }

    @FXML
    public void Cancelar() {
        CampoId.setText("");
        InternalAutorizar.setVisible(false);
        CampoNoControl.setText("");
        CampoCantidad.setText("");
        CampoTotal.setText("");
        CampoCarrera.setText("");
        CampoNombre.setText("");
        CampoSaldoFuturo.setText("");
        CampoSaldo.setText("");
        CampoPass.setText("");
        cobroPane.getScene().getWindow().hide();
    }

    @FXML
    public void NoControl() {
        UsuarioLnLocal usuarioLN = new UsuarioLN();
        s = usuarioLN.getPorNoControl(CampoNoControl.getText());
        if (s != null) {
            CampoNombre.setText(s.getNombre() + " " + s.getAPaterno());
            CampoCarrera.setText(s.getIdCarrera() + "");
            CampoSaldo.setText(s.getSaldo() + "");
            CampoCantidad.requestFocus();
        } else {
            CampoNombre.setText("");
            CampoCarrera.setText("");
            CampoSaldo.setText("");
            CampoNoControl.requestFocus();
        }
    }

    @FXML
    public void comboProductos() {
        ProductosLnLocal productosLnLocal = new ProductosLN();
        ObservableList<Productos> k = FXCollections.observableArrayList();
        for (Productos produ : productosLnLocal.getList()) {
            k.add(produ);
        }
        comboProductos.setItems(k);
    }

    @FXML
    public void addLinea() {
        System.out.println("AddLinea");
        if (!CampoNombre.getText().isEmpty()) {
            if (!CampoCantidad.getText().isEmpty() && Integer.parseInt(CampoCantidad.getText()) > 0) {
                if (comboProductos.getSelectionModel().getSelectedItem() != null) {
                    Detallemovimiento d = new Detallemovimiento();
                    d.setMovimientoId(cs);
                    d.setCantidad(Integer.parseInt(CampoCantidad.getText()));
                    p = (Productos) comboProductos.getSelectionModel().getSelectedItem();
                    d.setDescripcion(p.getNombre());
                    System.out.println(p.getPrecio());
                    System.out.println(p.getPrecio());
                    d.setPrecio(p.getPrecio());
                    double to=d.getCantidad() * Double.parseDouble(d.getPrecio()+"");
                    System.out.println(to);
                    d.setTotalLinea(BigDecimal.valueOf(to));


                    mtotal = 0;
                    for (Detallemovimiento detallemovimiento : listaDVen) {
                        mtotal += Double.parseDouble(detallemovimiento.getTotalLinea()+"");
                    }

                    mtotal = mtotal + (d.getCantidad() * Double.parseDouble(d.getPrecio()+""));

                    if (mtotal > s.getSaldo().floatValue()) {
                        JOptionPane.showMessageDialog(null, "SALDO INSUFICIENTE");
                        //interPanelError.setVisible(true);
                    } else {
                        listaDVen.add(d);
                        double saldo = ((s.getSaldo()).floatValue()) - (mtotal);

                        CampoTotal.setText(mtotal + "");
                        if (saldo <= 0) {
                            CampoSaldoFuturo.setText("Saldo agotado");
                        } else {
                            CampoSaldoFuturo.setText(saldo + "");
                        }
                    }

                    actulizarTablaDetaVenta();
                } else {
                    JOptionPane.showMessageDialog(null, "Seleccione un producto");
                }
            } else {
                JOptionPane.showMessageDialog(null, "Cantidad invalida");
            }
        } else {
            JOptionPane.showMessageDialog(null, "No Control Invalido");
        }
    }

    @FXML
    public void cancelarLinea() {
        try {
            System.out.println(TablaDetalles.getSelectionModel().getSelectedIndex());
            System.out.println(listaDVen.size());
            listaDVen.remove(TablaDetalles.getSelectionModel().getSelectedIndex());
            //calcular totales
            mtotal = 0;
            for (Detallemovimiento detallemovimiento : listaDVen) {
                mtotal += Double.parseDouble(detallemovimiento.getTotalLinea()+"");
            }


            if (mtotal > s.getSaldo().floatValue()) {
                JOptionPane.showMessageDialog(null, "SALDO INSUFICIENTE");
            } else {
                double saldo = ((s.getSaldo()).floatValue()) - (mtotal);

                CampoTotal.setText(mtotal + "");
                if (saldo <= 0) {
                    CampoSaldoFuturo.setText("Saldo agotado");
                } else {
                    CampoSaldoFuturo.setText(saldo + "");
                }
            }
            //calcular totales
            actulizarTablaDetaVenta();
        } catch (Exception f) {
            System.out.println(f);
        }
    }

    @FXML
    public void Agregar() {
        System.out.println(s);
        if (!CampoNombre.getText().isEmpty()) {
            if (!listaDVen.isEmpty()) {
                InternalAutorizar.setVisible(true);
                EtiquetaNombre.setText(s.getNombre() + " " + s.getAPaterno() + " " + s.getAMaterno());
            } else {
                JOptionPane.showMessageDialog(null, "Agregar Productos a vender");
            }
        } else {
            JOptionPane.showMessageDialog(null, "No Control Invalido");
        }
    }

    @FXML
    public void Autorizar() {


        UsuarioLnLocal usuarioLnLocal = new UsuarioLN();
        MovimientoLnLocal mll = new MovimientoLN();

        if (CampoPass.getText().equals(s.getContrasenia())) {
            System.out.println("Agregar.....");
            DetalleMovimientoLnLocal dmll = new DetallemovimientoLN();
            cs = new Movimiento();
            if (mll.getList().isEmpty()) {
                cs.setFolio("1");
            } else {
                System.out.println(mll.getList().size());
                Movimiento nm = mll.getPorId(mll.getList().size());
                System.out.println(nm);
                cs.setFolio((nm.getId() + 1) + "");
            }
            cs.setDescripcion("" + Encabezado.getText());
            Date d = new Date();
            cs.setFecha(d);
            cs.setHora(d);
            cs.setMonto(BigDecimal.valueOf(Double.parseDouble(CampoTotal.getText())));
            cs.setAutorizo(Autoriza.getId());
            TipoMovimientoLnLocal tmll = new TipoMovimientoLN();
            cs.setIdTipoMovimiento(tmll.getPorId(1));
            cs.setIdUsuario(s);
            s.setSaldo(BigDecimal.valueOf(s.getSaldo().doubleValue() - Double.parseDouble(CampoTotal.getText())));
            usuarioLnLocal.editar(s);
            mll.registrar(cs);
            for (Detallemovimiento detallemovimiento : listaDVen) {
                System.out.println(detallemovimiento);
                detallemovimiento.setMovimientoId(cs);
                dmll.registrar(detallemovimiento);
            }
            JOptionPane.showMessageDialog(null, "REGISTRO COMPLETO");
            Cancelar();
        } else {
            JOptionPane.showMessageDialog(null, "CONTRASEÑA INCORRECTA");
        }



    }

    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        comboProductos();
        CampoNoControl.requestFocus();
    }
}
